#ifndef DIJKSTRA_H
#define DIJKSTRA_H

#include "grafo.h"
#include "algoritmo.h"

class Dijkstra : public Algoritmo
{
    public:
        /** Costruttore che inizializza il grafo su cui operare */
        Dijkstra(Grafo* grafo) : Algoritmo(grafo), set(NULL) { };
        /** Distruttore di default */
        virtual ~Dijkstra();

        virtual void esegui(report_function report_func);
        virtual const char* get_nome();

    protected:
    private:
      GSList* set; //!< Set di nodi su cui operano ::makeset e ::deletemin

      void makeset(Grafo* &grafo); //!< crea la coda con priorità
      Nodo* deletemin(); //!< Estrae l'elemento con distanza minore dalla coda con priorità e lo restituisce
      static gint comparazione_nodi(gconstpointer nodo_a, gconstpointer nodo_b); //!< Comparazione tra due nodi
};

#endif // DIJKSTRA_H
